package com.itpuyang.futureDemo.demo01;

import java.util.HashMap;
import java.util.Hashtable;
import java.util.concurrent.ConcurrentHashMap;

/*
* 程序基本的设计方式：
* 一个典型的Future模式由以下几个部分组成：
Main：系统启动，调用Client发出请求
Client：返回Data对象，立即返回FutureData，并开启ClientThread线程装配RealData
Data：返回数据的接口
FutureData：Future数据，构造很快，但是是一个虚拟的数据，需要装配RealData，好比一个订单
RealData：真实数据，其构造是比较慢的，好比上面例子中的肯德基午餐。
=======================
* 1.首先是Data接口，代表数据
* 2.接着是FutureData，也是整个Future模式的核心：
* 3.下面是RealData：
* 4.然后从Client得到Data：
* 5.最后一个Main函数，把所有一切都串起来：
*
* */
public class FutureTest {
    public static void main(String[] args) {
        Client client = new Client();
        //这里会立即返回，因为得到的是FutureData而不是RealData
        Data data = client.request("name");
        System.out.println("请求完毕");
        try {
            //这里可以用一个sleep代替了对其他业务逻辑的处理
            //在处理这些业务逻辑的过程中，RealData被创建，从而充分利用了等待时间
            Thread.sleep(2000);
        } catch (InterruptedException e) {
        }
        //使用真实的数据，如果到这里数据还没有准备好，getResult()会等待数据准备完，再返回
        System.out.println("数据 = " + data.getResult());

        HashMap<Object, Object>HashMap = new HashMap<>();
        ConcurrentHashMap<Object, Object> concurrentHashMap = new ConcurrentHashMap<>();
        Hashtable<Object, Object> hashtable = new Hashtable<>();

    }


}
